﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using BE;
using BE.SearchCriteria;

namespace DAL
{
    public class VendedorDAL : BaseDAL
    {
        //obtener vendedor por id 
        public VendedorBE SeleccionarPorId(VendedorBE pVendedorBE)
        {
            VendedorBE oVendedorBE = null;
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdVendedor", pVendedorBE.IdVendedor));
                cmd.CommandText = "Vendedores_GetById";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    if (reader.Read())                    
                        oVendedorBE = ConstruirVendedor(reader);                    
                }

            }
            return oVendedorBE;
        }

        private VendedorBE ConstruirVendedor(SqlDataReader reader)
        {
            VendedorBE oVendedorBE = new VendedorBE();
            Object[] values = new Object[reader.FieldCount];

            reader.GetValues(values);

            oVendedorBE.IdVendedor = Int32.Parse(reader["IdVendedor"].ToString());
            oVendedorBE.Apellido = reader["Apellido"].ToString();
            oVendedorBE.Nombre = reader["Nombre"].ToString();
            oVendedorBE.NroDocumento = reader["NroDocumento"].ToString();
            oVendedorBE.oAreaBE = new AreaBE();
            if (reader["IdArea"] != DBNull.Value)
            {
                oVendedorBE.oAreaBE.IdArea = Int32.Parse(reader["IdArea"].ToString());
                oVendedorBE.oAreaBE.Descripcion = reader["Area"].ToString();
                oVendedorBE.oAreaBE.oZonaBE = new ZonasBE();
                oVendedorBE.oAreaBE.oZonaBE.IdZona = Int32.Parse(reader["IdZona"].ToString());
                oVendedorBE.oAreaBE.oZonaBE.Descripcion = reader["Zona"].ToString();
                if (reader["IdVendedorGteZonal"] != DBNull.Value)
                    oVendedorBE.oAreaBE.oZonaBE.IdVendedorGteZonal = Int32.Parse(reader["IdVendedorGteZonal"].ToString());
            }
            if (reader["IdCalle"] != DBNull.Value)
            {
                oVendedorBE.oCalleBE = new CalleBE();
                oVendedorBE.oCalleBE.IdCalle = Int32.Parse(reader["IdCalle"].ToString());
                oVendedorBE.oCalleBE.Descripcion = reader["Calle"].ToString();
            }
            oVendedorBE.NroCalle = Int32.Parse(reader["NroCalle"].ToString());
            if (reader["IdBarrio"] != DBNull.Value)
            {
                oVendedorBE.oBarrioBE = new BarrioBE();
                oVendedorBE.oBarrioBE.IdBarrio = Int32.Parse(reader["IdBarrio"].ToString());
                oVendedorBE.oBarrioBE.Descripcion = reader["Barrio"].ToString();
            }
            oVendedorBE.PisoDpto = reader["PisoDpto"].ToString();
            oVendedorBE.NroDocumento = reader["NroDocumento"].ToString();
            oVendedorBE.Telefono = Convert.ToString(reader["Telefono"]);
            oVendedorBE.FechaNacimiento = Convert.ToDateTime(reader["FechaNacimiento"]);
            oVendedorBE.FechaAlta = Convert.ToDateTime(reader["FechaAlta"]);
            oVendedorBE.Activo = Convert.ToBoolean(reader["Activo"]);
            oVendedorBE.Deudor = Convert.ToBoolean(reader["Deudor"]);
            oVendedorBE.Email = Convert.ToString(reader["Email"]);


            return oVendedorBE;
        }


        public void Insertar(VendedorBE pElemBE)
        {
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "Vendedores_i";
                    cmd.Parameters.Add(new SqlParameter("@Nombre", pElemBE.Nombre));
                    cmd.Parameters.Add(new SqlParameter("@Apellido", pElemBE.Apellido));
                    cmd.Parameters.Add(new SqlParameter("@TipoDocumento", pElemBE.TipoDocumento));
                    cmd.Parameters.Add(new SqlParameter("@NroDocumento", pElemBE.NroDocumento));
                    cmd.Parameters.Add(new SqlParameter("@FechaNacimiento", pElemBE.FechaNacimiento));
                    cmd.Parameters.Add(new SqlParameter("@Activo", pElemBE.Activo));
                    cmd.Parameters.Add(new SqlParameter("@Deudor", pElemBE.Deudor));
                    if (pElemBE.oBarrioBE != null)
                        cmd.Parameters.Add(new SqlParameter("@IdBarrio", pElemBE.oBarrioBE.IdBarrio));
                    if (pElemBE.oCalleBE != null)
                        cmd.Parameters.Add(new SqlParameter("@IdCalle", pElemBE.oCalleBE.IdCalle));
                    cmd.Parameters.Add(new SqlParameter("@NroCalle", pElemBE.NroCalle));
                    if (pElemBE.oAreaBE != null)
                        cmd.Parameters.Add(new SqlParameter("@IdArea", pElemBE.oAreaBE.IdArea));
                    cmd.Parameters.Add(new SqlParameter("@Email", pElemBE.Email));
                    cmd.Parameters.Add(new SqlParameter("@Telefono", pElemBE.Telefono));
                    cmd.Parameters.Add(new SqlParameter("@PisoDpto", pElemBE.PisoDpto));

                    SqlParameter p = new SqlParameter();
                    p.ParameterName = "@IdVendedor";
                    p.Direction = ParameterDirection.Output;
                    p.SqlDbType = SqlDbType.Int;
                    cmd.Parameters.Add(p);

                    cnn.Open();
                    cmd.ExecuteNonQuery();
                    pElemBE.IdVendedor = (Int32)cmd.Parameters["@IdVendedor"].Value;
                }
                catch (Exception)
                {
                    throw;
                }

            }
        }


        public void Delete(VendedorBE pVendedor)
        {
            try
            {
                using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "Vendedores_d";
                    cmd.Parameters.Add(new SqlParameter("@IdVendedor", pVendedor.IdVendedor));
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception)
            { throw; }

        }

        public void Modificar(VendedorBE pElemBE)
        {
            try
            {
                using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "Vendedores_u";
                    cmd.Parameters.Add(new SqlParameter("@IdVendedor", pElemBE.IdVendedor));
                    cmd.Parameters.Add(new SqlParameter("@Nombre", pElemBE.Nombre));
                    cmd.Parameters.Add(new SqlParameter("@Apellido", pElemBE.Apellido));
                    cmd.Parameters.Add(new SqlParameter("@TipoDocumento", pElemBE.TipoDocumento));
                    cmd.Parameters.Add(new SqlParameter("@NroDocumento", pElemBE.NroDocumento));
                    cmd.Parameters.Add(new SqlParameter("@FechaNacimiento", pElemBE.FechaNacimiento));
                    cmd.Parameters.Add(new SqlParameter("@Activo", pElemBE.Activo));
                    cmd.Parameters.Add(new SqlParameter("@Deudor", pElemBE.Deudor));
                    if (pElemBE.oBarrioBE != null)
                        cmd.Parameters.Add(new SqlParameter("@IdBarrio", pElemBE.oBarrioBE.IdBarrio));
                    if (pElemBE.oCalleBE != null)
                        cmd.Parameters.Add(new SqlParameter("@IdCalle", pElemBE.oCalleBE.IdCalle));
                    cmd.Parameters.Add(new SqlParameter("@NroCalle", pElemBE.NroCalle));
                    if (pElemBE.oAreaBE != null)
                        cmd.Parameters.Add(new SqlParameter("@IdArea", pElemBE.oAreaBE.IdArea));
                    cmd.Parameters.Add(new SqlParameter("@Email", pElemBE.Email));
                    cmd.Parameters.Add(new SqlParameter("@Telefono", pElemBE.Telefono));
                    cmd.Parameters.Add(new SqlParameter("@PisoDpto", pElemBE.PisoDpto));
                    
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception)
            { throw; }
        }


        public List<VendedorBE> SeleccionarPorParametros(BaseSC pFiltroSC, int pPageSize, int? pPageNum, ref int pCountReg)
        {
            VendedorSC wFiltroSC = (VendedorSC)pFiltroSC;
            if (wFiltroSC == null)
                wFiltroSC = new VendedorSC();

            List<VendedorBE> listaDeVendedorBE = null;
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdVendedor", wFiltroSC.IdVendedor));
                cmd.Parameters.Add(new SqlParameter("@Apellido", wFiltroSC.Apellido));
                cmd.Parameters.Add(new SqlParameter("@Nombre", wFiltroSC.Nombre));
                cmd.Parameters.Add(new SqlParameter("@NroDocumento", wFiltroSC.NroDocumento));
                cmd.Parameters.Add(new SqlParameter("@IdZona", wFiltroSC.IdZona));
                cmd.Parameters.Add(new SqlParameter("@IdArea", wFiltroSC.IdArea));
                cmd.Parameters.Add(new SqlParameter("@pagesize", pPageSize));
                cmd.Parameters.Add(new SqlParameter("@pagenum", pPageNum));

                SqlParameter p = new SqlParameter();
                p.ParameterName = "@PageCount";
                p.Direction = ParameterDirection.Output;
                p.SqlDbType = SqlDbType.Int;
                cmd.Parameters.Add(p);

                cmd.CommandText = "Vendedores_GetAllPaginated";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {                    
                    listaDeVendedorBE = new List<VendedorBE>();

                    while (reader.Read())
                    {
                        VendedorBE oVendedorBE = ConstruirVendedor(reader);

                        listaDeVendedorBE.Add(oVendedorBE);
                    }
                }
                reader.Close();
                pCountReg = (Int32)cmd.Parameters["@PageCount"].Value;

            }
            return listaDeVendedorBE;
        }


    }
}
